package musgo
import java.text.*;
import org.springframework.dao.DataIntegrityViolationException

class CancionController extends BaseController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
    //Closure para controlar los accesos de los usuarios
    def beforeInterceptor = [action:this.&auth, except:['show', 'list','puntuar']]

    def index() {
        redirect(action: "list", params: params)
    }
    
  
    def list(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        [cancionInstanceList: Cancion.list(params), cancionInstanceTotal: Cancion.count()]
    }
    
   

    def create() {
        
        if(params.ide != null){      //ide del album
        ArchivoMusica musica;
        
     ///-----------------------------------------creacion archivomusica
     if(params.mp3file!=null){
        def f = request.getFile('mp3file')
        
		if (!f.empty) {
			 musica = new ArchivoMusica(
				nombre : f.originalFilename
				, tipoContenido : f.contentType
				, tamano : f.size
				, archivo : f.bytes
			).save()
		} 
    ///////////////////////////creacion de la cancion
    Cancion cancion = new Cancion(params)         
    Album albumQpertenece=Album.get(params.ide)      //busca el albun ala que pertenece la cancion
     cancion.album = albumQpertenece                  //hace la referencia al album
    
   try{
    cancion.duracion=musica.tamano                //si no ingreso un archivo , que no haga nada
    cancion.mp3= musica
  }
  catch(NullPointerException ex){
      
  }
    
           
    if(!cancion.hasErrors() && cancion.save()){   //si graba correctament
                albumQpertenece.addToCanciones(cancion)
                albumQpertenece.save()
		redirect(controller:"album" ,action:"show", id:albumQpertenece.id)
			
	}
        
     }} 
        [idAlbum:params.ide]         //informacion del album al qu pertenece la cancion
        
        
    }//fin create

    def save() {
        def cancionInstance = new Cancion(params)
        if (!cancionInstance.save(flush: true)) {
            render(view: "create", model: [cancionInstance: cancionInstance])
            return
        }

        flash.message = message(code: 'default.created.message', args: [message(code: 'cancion.label', default: 'Cancion'), cancionInstance.id])
        redirect(action: "show", id: cancionInstance.id)
    }

    def show(Long id) {
        def cancionInstance = Cancion.get(id)
        if (!cancionInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'cancion.label', default: 'Cancion'), id])
            redirect(action: "list")
            return
        }

        [cancionInstance: cancionInstance]
    }

    def edit(Long id) {
        try{
        int aux
        boolean estaenalbum=false
        println params
        def album = Album.get(params.ide)
        (album.canciones).each{                 //coge el map de id de canciones y trae las canciones a un array list
            
             aux=it.id
            if(aux==Integer.parseInt(params.idcancion)){estaenalbum=true}
        }
        if(estaenalbum){
        def cancionInstance = Cancion.get(params.idcancion)
        [cancionInstance:cancionInstance, album:album]
        }else{
            redirect(controller:"album" ,action: "show" ,id:"${params.ide}")
        }
        }catch (Exception e){
          redirect(controller:"album" ,action: "show" ,id:"${params.ide}")  
        }
    }

    def update(Long id, Long version) {
       
        def cancionInstance = Cancion.get(params.ide)
        cancionInstance.properties = params

        if (!cancionInstance.save(flush: true)) {
          redirect(action: "edit" ,params:[ide:params.idalbum, idcancion:params.ide])
            
        }else{
         redirect(controller:"album" ,action: "show" ,id:"${params.idalbum}")
        }
    }

    def delete(Long id) {
        
        def cancionInstance = Cancion.get(params.ide)
        if (!cancionInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'cancion.label', default: 'Cancion'), id])
            redirect(action: "edit" ,params:[ide:params.idalbum, idcancion:params.ide])
            
        }

        try {
            cancionInstance.delete(flush: true)
            flash.message = message(code: 'default.deleted.message', args: [message(code: 'cancion.label', default: 'Cancion'), id])
            redirect(action: "edit" ,params:[ide:params.idalbum, idcancion:params.ide])
        }
        catch (DataIntegrityViolationException e) {
            flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'cancion.label', default: 'Cancion'), id])
            redirect(action: "edit" ,params:[ide:params.idalbum, idcancion:params.ide])
        }
    }
    
    def puntuar(){
        
        println params
        def cancion = Cancion.get(params.id)
        cancion.votantes=cancion.votantes+1;
        cancion.cantidadVotada=cancion.cantidadVotada+Integer.parseInt(params.valor);
       
         cancion.valoracion=cancion.cantidadVotada/cancion.votantes;
        redirect(controller:"album", action:"show" ,id:"${params.albumid}")
        
    }
}
